﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int* findErrorNums(int* nums, int numsSize, int* returnSize) 
{
    *returnSize = 2;
    int* arr = (int*)calloc(numsSize + 1, sizeof(int));
    int* ret = (int*)malloc((*returnSize) * sizeof(int));
    int sum = 0;
    int f_sum = 0;
    int i = 0;
    for (i = 0; i < numsSize; i++)
    {
        int j = 0;
        for (j = 0; j < i; j++)
        {
            if (nums[i] == arr[j])//将nums中的数复制到arr中，并判断arr中是否有相同数
            {
                ret[0] = nums[i];
                break;
            }
        }
        if (j == i)
        {
            arr[i] = nums[i];
        }
    }
    for (i = 0; i < numsSize; i++)
    {
        sum += i;//求1到n的集合之和
        f_sum += nums[i];//求错误数组和
    }
    sum += i;
    ret[1] = sum - (f_sum - ret[0]);//相减为丢失的数字
    free(arr);//释放
    arr = NULL;
    return ret;
}
int main()
{
    //找到数组中的重复数字，集合 s 包含从 1 到 n 的整数。
    //因为数据错误，导致集合里面某一个数字复制了成了集合里面的另外一个数字的值
    //导致集合 丢失了一个数字 并且给定一个数组 nums 代表了集合 S 发生错误后的结果。
    // 请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回
    int arr[10] = { 1,2,3,4,5,5,7,8,9,10};
    int returnSize = 2;
    int*p=findErrorNums(arr,sizeof(arr)/sizeof(arr[0]), &returnSize);
    printf("重复数字为%d\n", *p);
    printf("丢失数字为%d", *(p+1));

	return 0;
}